import 'package:json_annotation/json_annotation.dart';
import 'package:xindong/models/user/xindong_user.dart';
import 'package:xindong/routes/call/controller/xindong_call_controller.dart';

part 'xindong_signal_message.g.dart';

// 信令操作类型
class XinDongSignalActionType {
  static const int invite = 1;
  static const int cancel = 2;
  static const int accept = 3;
  static const int reject = 4;
  static const int timeout = 5;
  static const int end = 100;
}

// 信令消息模型（不能随便修改数据类型，否则容易出现信令解析版本不匹配）
@JsonSerializable()
class XinDongSignalMessage {
  int type = XinDongCallType.unknown; // 类型
  bool isCallEnd = false; // 是否是要结束通话（只用在invite()中发出新的信令）
  bool isBusy = false; // 是否告诉对方我在忙占线（只用在reject()中）
  String price = "0"; // 价格 币/分钟
  String orderid = ""; // 订单id
  XinDongUser? user; // 对方用户信息
  int? version = 1; // 版本，默认最新版本=1。null：使用自定义用户资料，1：使用信令资料

  XinDongSignalMessage();

  // 是否是通话信令
  static bool isCalling(XinDongSignalMessage? model) {
    if (model == null) {
      return false;
    } else if (model.type == XinDongCallType.unknown || model.user == null) {
      return false;
    }
    return true;
  }

  factory XinDongSignalMessage.fromJson(Map<String, dynamic> json) => _$XinDongSignalMessageFromJson(json);

  Map<String, dynamic> toJson() => _$XinDongSignalMessageToJson(this);
}
